#include <cstdio>
#include <algorithm>
#include <set>
#include <cstring>
using namespace std;
const int N=100005;
int n,m;
int dp[100005];
int v[105];
int c[105];
int va[105];
//记录j种钱用的次数
int vis[100005];
set<int> res;
int main(void){
    //freopen("data.txt","r",stdin);
    while(~scanf("%d%d",&n,&m)){
        if(n==0 && m==0){
            break;
        }
        for(int i=0;i<n;i++){
            scanf("%d",&va[i]);
        }
        for(int i=0;i<n;i++){
            scanf("%d",&c[i]);
        }
        // int k=0;
        // for(int i=0;i<n;i++){
        //     for(int j=1;j<c[i];j*=2){
        //         va[k]=j*v[i];
        //         k++;
        //         c[i]--;
        //     }
        //     if(c[i]>0){
        //         va[k]=c[i]*v[i];
        //         k++;
        //     }
        // }
        // res.clear();
        int cnt=0;
        memset(dp,0,sizeof(dp));
        dp[0]=1;
        for(int i=0;i<n;i++){
            memset(vis,0,sizeof(vis));
            for(int j=va[i];j<=m;j++){
                if(dp[j-va[i]] && !dp[j] && vis[j-va[i]]<c[i]){
                    dp[j]=1;
                    vis[j]=vis[j-va[i]]+1;
                    cnt++;
                }
            }
            // for(int j=m;j>0;j--){
            //     if(j>va[i]){
            //         dp[j]=max(dp[j],dp[j-va[i]]+va[i]);
            //         //printf("%d %d\n",j,dp[j]);
            //         res.insert(dp[j]);
            //     }
            // }
        }
        // for(int i=0;i<m;i++){
        //     printf("%d ",dp[i]);
        // }
        // printf("\n");
        printf("%d\n",cnt);
    }
    return 0;
}
